package cn.cdeden.resource.service;

import cn.cdeden.common.core.utils.page.TableDataInfo;
import cn.cdeden.common.mybatis.core.page.PageQuery;
import cn.cdeden.common.oss.enumd.OssModuleType;
import cn.cdeden.resource.api.domain.RemoteFilesDownload;
import cn.cdeden.resource.domain.SysOssDownloadRecord;
import cn.cdeden.resource.domain.bo.SysOssDownloadRecordBo;
import cn.cdeden.resource.domain.vo.SysOssDownloadRecordVo;
import jakarta.servlet.http.HttpServletRequest;

import java.util.Collection;
import java.util.List;

/**
 * 文件下载记录Service接口
 *
 * @author Yu.
 * @date 2024-12-08
 */
public interface ISysOssDownloadRecordService  {

    /**
     * @author Yu.
     * @Description //  保存下载记录
     * @Date 2024/12/9 9:59
     * @param storage
     * @param request
     * @return boolean
     **/
    boolean save(RemoteFilesDownload storage, HttpServletRequest request);


    /**
     * @author Yu.
     * @Description //  构建 下载记录
     * @Date 2024/12/9 9:59
     * @param storage
     * @param request
     * @return cn.cdeden.resource.domain.SysOssDownloadRecord
     **/
    SysOssDownloadRecord generate(RemoteFilesDownload storage,  HttpServletRequest request);


    /**
     * @author Yu.
     * @Description // 批量保存下载记录
     * @Date 2024/12/9 9:59
     * @param list
     * @return boolean
     **/
    boolean saveList(List<SysOssDownloadRecord> list);


    /**
     * @author Yu.
     * @Description // 获取单个文件下载记录列表
     * @Date 2024/12/9 10:38
     * @param bo //参数
     * @return java.util.List<cn.cdeden.resource.domain.SysOssDownloadRecord>
     **/
    List<SysOssDownloadRecordVo> selectRecordList(SysOssDownloadRecordBo bo);

    /**
     * @author Yu.
     * @Description //  获取单个文件下载记录 分页列表
     * @Date 2024/12/9 10:39
     * @param bo //参数
     * @param pageQuery
     * @return cn.cdeden.common.core.utils.page.TableDataInfo<cn.cdeden.resource.domain.SysOssDownloadRecord>
     **/
    TableDataInfo<SysOssDownloadRecordVo> selectRecordPage(SysOssDownloadRecordBo bo, PageQuery pageQuery);

    /**
     * 删除下载记录
     *
     * @param moduleId
     * @param type
     * @param isDeleteFile
     * @param userIds
     * @return void
     * @author Yu.
     * @Date 2025/1/9 14:13
     **/
    Boolean deleteDownloadByModuleId(Collection<String> moduleId, OssModuleType type, boolean isDeleteFile,Collection<String> userIds);
}
